System Design Interview
This provides an excellent overview: https://www.hellointerview.com/learn/system-design/in-a-hurry/introduction
- Everything here will mostly be a short write-up (maybe some more additional personal notes)
Delivery Framework

- This is how we should structure our answer during the interview
Requirements 5 minutes Gather requirements for the problem
- Functional requirements
- Prioritized
- List of core features that we must support (aim for about 3 core features)
- Non-functional requirements
- System requirements like availability and scalability, etc
Core Entities 2 minutes
- Identify entities/top-level primitives that make up our products.
- Should just list out the list here while checking in with the interviewer, no need to go into details of each
API or System Interface 5 minutes
- Choose the right communication protocol
- Design API endpoints
High Level Design: 10-15 minutes
- Design database schema
- Endpoint logic
- Basic microservices architecture

Deep Dives 10 minutes
- While doing everything above, we should keep a list of edge cases/ineffeciency in our designs and go over that here.
- Example: an endpoint may works but for large volume of data can be really inefficient
- Go over some non-functional requirements that we discussed earlier and discuss/improve the design
Core Concepts
Scaling
Consistency
- Refers to how much users can tolerate getting stale data.
- Strong consistency: after the data is written, all subsequent reads will reflect that write
- Weak/eventual consistency: allows a period of time where the data is stale
- Most real-life systems don't require strong consistency everywhere, but rather blend strong and weak consistency for different parts of the system.